{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 导入数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>订单号</th>\n",
       "      <th>产品码</th>\n",
       "      <th>消费日期</th>\n",
       "      <th>产品说明</th>\n",
       "      <th>数量</th>\n",
       "      <th>单价</th>\n",
       "      <th>用户码</th>\n",
       "      <th>城市</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>536374</td>\n",
       "      <td>21258</td>\n",
       "      <td>6/1/2020 9:09</td>\n",
       "      <td>五彩玫瑰五支装</td>\n",
       "      <td>32</td>\n",
       "      <td>10.95</td>\n",
       "      <td>15100</td>\n",
       "      <td>北京</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>536376</td>\n",
       "      <td>22114</td>\n",
       "      <td>6/1/2020 9:32</td>\n",
       "      <td>茉莉花白色25枝</td>\n",
       "      <td>48</td>\n",
       "      <td>3.45</td>\n",
       "      <td>15291</td>\n",
       "      <td>上海</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>536376</td>\n",
       "      <td>21733</td>\n",
       "      <td>6/1/2020 9:32</td>\n",
       "      <td>教师节向日葵3枝尤加利5枝</td>\n",
       "      <td>64</td>\n",
       "      <td>2.55</td>\n",
       "      <td>15291</td>\n",
       "      <td>上海</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>536378</td>\n",
       "      <td>22386</td>\n",
       "      <td>6/1/2020 9:37</td>\n",
       "      <td>百合粉色10花苞</td>\n",
       "      <td>10</td>\n",
       "      <td>1.95</td>\n",
       "      <td>14688</td>\n",
       "      <td>北京</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>536378</td>\n",
       "      <td>85099C</td>\n",
       "      <td>6/1/2020 9:37</td>\n",
       "      <td>橙黄香槟色康乃馨</td>\n",
       "      <td>10</td>\n",
       "      <td>1.95</td>\n",
       "      <td>14688</td>\n",
       "      <td>北京</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      订单号     产品码           消费日期           产品说明  数量     单价    用户码  城市\n",
       "0  536374   21258  6/1/2020 9:09        五彩玫瑰五支装  32  10.95  15100  北京\n",
       "1  536376   22114  6/1/2020 9:32       茉莉花白色25枝  48   3.45  15291  上海\n",
       "2  536376   21733  6/1/2020 9:32  教师节向日葵3枝尤加利5枝  64   2.55  15291  上海\n",
       "3  536378   22386  6/1/2020 9:37       百合粉色10花苞  10   1.95  14688  北京\n",
       "4  536378  85099C  6/1/2020 9:37       橙黄香槟色康乃馨  10   1.95  14688  北京"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas as pd #导入Pandas\n",
    "df_sales = pd.read_csv('易速鲜花订单记录.csv') #载入数据\n",
    "df_sales.head() #显示头几行数据 "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>订单号</th>\n",
       "      <th>产品码</th>\n",
       "      <th>消费日期</th>\n",
       "      <th>产品说明</th>\n",
       "      <th>数量</th>\n",
       "      <th>单价</th>\n",
       "      <th>用户码</th>\n",
       "      <th>城市</th>\n",
       "      <th>城市_上海</th>\n",
       "      <th>城市_北京</th>\n",
       "      <th>...</th>\n",
       "      <th>城市_深圳</th>\n",
       "      <th>城市_苏州</th>\n",
       "      <th>城市_西安</th>\n",
       "      <th>城市_上海</th>\n",
       "      <th>城市_北京</th>\n",
       "      <th>城市_广州</th>\n",
       "      <th>城市_成都</th>\n",
       "      <th>城市_深圳</th>\n",
       "      <th>城市_苏州</th>\n",
       "      <th>城市_西安</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>536374</td>\n",
       "      <td>21258</td>\n",
       "      <td>6/1/2020 9:09</td>\n",
       "      <td>五彩玫瑰五支装</td>\n",
       "      <td>32</td>\n",
       "      <td>10.95</td>\n",
       "      <td>15100</td>\n",
       "      <td>北京</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>536376</td>\n",
       "      <td>22114</td>\n",
       "      <td>6/1/2020 9:32</td>\n",
       "      <td>茉莉花白色25枝</td>\n",
       "      <td>48</td>\n",
       "      <td>3.45</td>\n",
       "      <td>15291</td>\n",
       "      <td>上海</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>536376</td>\n",
       "      <td>21733</td>\n",
       "      <td>6/1/2020 9:32</td>\n",
       "      <td>教师节向日葵3枝尤加利5枝</td>\n",
       "      <td>64</td>\n",
       "      <td>2.55</td>\n",
       "      <td>15291</td>\n",
       "      <td>上海</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>536378</td>\n",
       "      <td>22386</td>\n",
       "      <td>6/1/2020 9:37</td>\n",
       "      <td>百合粉色10花苞</td>\n",
       "      <td>10</td>\n",
       "      <td>1.95</td>\n",
       "      <td>14688</td>\n",
       "      <td>北京</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>536378</td>\n",
       "      <td>85099C</td>\n",
       "      <td>6/1/2020 9:37</td>\n",
       "      <td>橙黄香槟色康乃馨</td>\n",
       "      <td>10</td>\n",
       "      <td>1.95</td>\n",
       "      <td>14688</td>\n",
       "      <td>北京</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>87175</th>\n",
       "      <td>581585</td>\n",
       "      <td>21684</td>\n",
       "      <td>6/9/2021 12:31</td>\n",
       "      <td>产品说明掩码</td>\n",
       "      <td>12</td>\n",
       "      <td>5.00</td>\n",
       "      <td>15804</td>\n",
       "      <td>深圳</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>87176</th>\n",
       "      <td>581585</td>\n",
       "      <td>22398</td>\n",
       "      <td>6/9/2021 12:31</td>\n",
       "      <td>产品说明掩码</td>\n",
       "      <td>12</td>\n",
       "      <td>499.00</td>\n",
       "      <td>15804</td>\n",
       "      <td>深圳</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>87177</th>\n",
       "      <td>581585</td>\n",
       "      <td>23328</td>\n",
       "      <td>6/9/2021 12:31</td>\n",
       "      <td>产品说明掩码</td>\n",
       "      <td>4</td>\n",
       "      <td>58.00</td>\n",
       "      <td>15804</td>\n",
       "      <td>深圳</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>87178</th>\n",
       "      <td>581585</td>\n",
       "      <td>23145</td>\n",
       "      <td>6/9/2021 12:31</td>\n",
       "      <td>产品说明掩码</td>\n",
       "      <td>12</td>\n",
       "      <td>88.90</td>\n",
       "      <td>15804</td>\n",
       "      <td>深圳</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>87179</th>\n",
       "      <td>581585</td>\n",
       "      <td>22466</td>\n",
       "      <td>6/9/2021 12:31</td>\n",
       "      <td>产品说明掩码</td>\n",
       "      <td>12</td>\n",
       "      <td>78.00</td>\n",
       "      <td>15804</td>\n",
       "      <td>深圳</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>87180 rows × 22 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "          订单号     产品码            消费日期           产品说明  数量      单价    用户码  城市  \\\n",
       "0      536374   21258   6/1/2020 9:09        五彩玫瑰五支装  32   10.95  15100  北京   \n",
       "1      536376   22114   6/1/2020 9:32       茉莉花白色25枝  48    3.45  15291  上海   \n",
       "2      536376   21733   6/1/2020 9:32  教师节向日葵3枝尤加利5枝  64    2.55  15291  上海   \n",
       "3      536378   22386   6/1/2020 9:37       百合粉色10花苞  10    1.95  14688  北京   \n",
       "4      536378  85099C   6/1/2020 9:37       橙黄香槟色康乃馨  10    1.95  14688  北京   \n",
       "...       ...     ...             ...            ...  ..     ...    ...  ..   \n",
       "87175  581585   21684  6/9/2021 12:31         产品说明掩码  12    5.00  15804  深圳   \n",
       "87176  581585   22398  6/9/2021 12:31         产品说明掩码  12  499.00  15804  深圳   \n",
       "87177  581585   23328  6/9/2021 12:31         产品说明掩码   4   58.00  15804  深圳   \n",
       "87178  581585   23145  6/9/2021 12:31         产品说明掩码  12   88.90  15804  深圳   \n",
       "87179  581585   22466  6/9/2021 12:31         产品说明掩码  12   78.00  15804  深圳   \n",
       "\n",
       "       城市_上海  城市_北京  ...  城市_深圳  城市_苏州  城市_西安  城市_上海  城市_北京  城市_广州  城市_成都  \\\n",
       "0          0      1  ...      0      0      0      0      1      0      0   \n",
       "1          1      0  ...      0      0      0      1      0      0      0   \n",
       "2          1      0  ...      0      0      0      1      0      0      0   \n",
       "3          0      1  ...      0      0      0      0      1      0      0   \n",
       "4          0      1  ...      0      0      0      0      1      0      0   \n",
       "...      ...    ...  ...    ...    ...    ...    ...    ...    ...    ...   \n",
       "87175      0      0  ...      1      0      0      0      0      0      0   \n",
       "87176      0      0  ...      1      0      0      0      0      0      0   \n",
       "87177      0      0  ...      1      0      0      0      0      0      0   \n",
       "87178      0      0  ...      1      0      0      0      0      0      0   \n",
       "87179      0      0  ...      1      0      0      0      0      0      0   \n",
       "\n",
       "       城市_深圳  城市_苏州  城市_西安  \n",
       "0          0      0      0  \n",
       "1          0      0      0  \n",
       "2          0      0      0  \n",
       "3          0      0      0  \n",
       "4          0      0      0  \n",
       "...      ...    ...    ...  \n",
       "87175      1      0      0  \n",
       "87176      1      0      0  \n",
       "87177      1      0      0  \n",
       "87178      1      0      0  \n",
       "87179      1      0      0  \n",
       "\n",
       "[87180 rows x 22 columns]"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "city = pd.get_dummies(df_sales.城市, prefix='城市')\n",
    "df_sales = pd.concat([df_sales, city], axis=1)\n",
    "df_sales"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 整理日期格式"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "日期范围（格式转化前）: 1/1/2021 10:11 ~ 9/9/2020 9:20\n",
      "日期范围（格式转化后）: 2020-06-01 09:09:00 ~ 2021-06-09 12:31:00\n"
     ]
    }
   ],
   "source": [
    "df_sales = pd.read_csv('易速鲜花订单记录.csv') #载入数据\n",
    "print('日期范围（格式转化前）: %s ~ %s' % (df_sales['消费日期'].min(), df_sales['消费日期'].max())) #显示日期范围（格式转换前）\n",
    "df_sales['消费日期'] = pd.to_datetime(df_sales['消费日期']) #转换日期格式\n",
    "print('日期范围（格式转化后）: %s ~ %s' % (df_sales['消费日期'].min(), df_sales['消费日期'].max()))#显示日期范围"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "日期范围（删除不完整的月份）: 2020-06-01 09:09:00 ~ 2021-05-31 17:39:00\n"
     ]
    }
   ],
   "source": [
    "df_sales = df_sales.loc[df_sales['消费日期'] < '2021-06-01'] #只保留整月数据\n",
    "print('日期范围（删除不完整的月份）: %s ~ %s' % (df_sales['消费日期'].min(), df_sales['消费日期'].max())) #显示日期范围"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 数据可视化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 864x432 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt # 导入Matplotlib的pyplot模块\n",
    "# 构建月度的订单数的DateFrame\n",
    "df_orders_monthly = df_sales.set_index('消费日期')['订单号'].resample('M').nunique()\n",
    "# 设定绘画的画布\n",
    "ax = pd.DataFrame(df_orders_monthly.values).plot(grid=True, figsize=(12, 6), legend=False)\n",
    "ax.set_xlabel(\"月份\") # X轴label\n",
    "ax.set_ylabel(\"订单数\") # Y轴label\n",
    "ax.set_title(\"月度订单数\") # 图题\n",
    "# 设定X轴月份显示格式\n",
    "plt.xticks(\n",
    "    range(len(df_orders_monthly.index)),\n",
    "    [x.strftime('%m.%Y') for x in df_orders_monthly.index],\n",
    "    rotation=45\n",
    ")\n",
    "plt.show() # 绘画"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 数据清洗"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_sales = df_sales.drop_duplicates() # 删除重复数据行"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 特征工程"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>订单号</th>\n",
       "      <th>产品码</th>\n",
       "      <th>消费日期</th>\n",
       "      <th>产品说明</th>\n",
       "      <th>数量</th>\n",
       "      <th>单价</th>\n",
       "      <th>用户码</th>\n",
       "      <th>城市</th>\n",
       "      <th>总价</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>536374</td>\n",
       "      <td>21258</td>\n",
       "      <td>2020-06-01 09:09:00</td>\n",
       "      <td>五彩玫瑰五支装</td>\n",
       "      <td>32</td>\n",
       "      <td>10.95</td>\n",
       "      <td>15100</td>\n",
       "      <td>北京</td>\n",
       "      <td>350.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>536376</td>\n",
       "      <td>22114</td>\n",
       "      <td>2020-06-01 09:32:00</td>\n",
       "      <td>茉莉花白色25枝</td>\n",
       "      <td>48</td>\n",
       "      <td>3.45</td>\n",
       "      <td>15291</td>\n",
       "      <td>上海</td>\n",
       "      <td>165.6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>536376</td>\n",
       "      <td>21733</td>\n",
       "      <td>2020-06-01 09:32:00</td>\n",
       "      <td>教师节向日葵3枝尤加利5枝</td>\n",
       "      <td>64</td>\n",
       "      <td>2.55</td>\n",
       "      <td>15291</td>\n",
       "      <td>上海</td>\n",
       "      <td>163.2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>536378</td>\n",
       "      <td>22386</td>\n",
       "      <td>2020-06-01 09:37:00</td>\n",
       "      <td>百合粉色10花苞</td>\n",
       "      <td>10</td>\n",
       "      <td>1.95</td>\n",
       "      <td>14688</td>\n",
       "      <td>北京</td>\n",
       "      <td>19.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>536378</td>\n",
       "      <td>85099C</td>\n",
       "      <td>2020-06-01 09:37:00</td>\n",
       "      <td>橙黄香槟色康乃馨</td>\n",
       "      <td>10</td>\n",
       "      <td>1.95</td>\n",
       "      <td>14688</td>\n",
       "      <td>北京</td>\n",
       "      <td>19.5</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      订单号     产品码                消费日期           产品说明  数量     单价    用户码  城市  \\\n",
       "0  536374   21258 2020-06-01 09:09:00        五彩玫瑰五支装  32  10.95  15100  北京   \n",
       "1  536376   22114 2020-06-01 09:32:00       茉莉花白色25枝  48   3.45  15291  上海   \n",
       "2  536376   21733 2020-06-01 09:32:00  教师节向日葵3枝尤加利5枝  64   2.55  15291  上海   \n",
       "3  536378   22386 2020-06-01 09:37:00       百合粉色10花苞  10   1.95  14688  北京   \n",
       "4  536378  85099C 2020-06-01 09:37:00       橙黄香槟色康乃馨  10   1.95  14688  北京   \n",
       "\n",
       "      总价  \n",
       "0  350.4  \n",
       "1  165.6  \n",
       "2  163.2  \n",
       "3   19.5  \n",
       "4   19.5  "
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_sales['总价'] = df_sales['数量'] * df_sales['单价'] # 计算每单的总价\n",
    "df_sales.head() # 显示头几行数据"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 构建User用户表"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>订单号</th>\n",
       "      <th>产品码</th>\n",
       "      <th>消费日期</th>\n",
       "      <th>产品说明</th>\n",
       "      <th>数量</th>\n",
       "      <th>单价</th>\n",
       "      <th>用户码</th>\n",
       "      <th>城市</th>\n",
       "      <th>总价</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>536374</td>\n",
       "      <td>21258</td>\n",
       "      <td>2020-06-01 09:09:00</td>\n",
       "      <td>五彩玫瑰五支装</td>\n",
       "      <td>32</td>\n",
       "      <td>10.95</td>\n",
       "      <td>15100</td>\n",
       "      <td>北京</td>\n",
       "      <td>350.40</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>536376</td>\n",
       "      <td>22114</td>\n",
       "      <td>2020-06-01 09:32:00</td>\n",
       "      <td>茉莉花白色25枝</td>\n",
       "      <td>48</td>\n",
       "      <td>3.45</td>\n",
       "      <td>15291</td>\n",
       "      <td>上海</td>\n",
       "      <td>165.60</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>536376</td>\n",
       "      <td>21733</td>\n",
       "      <td>2020-06-01 09:32:00</td>\n",
       "      <td>教师节向日葵3枝尤加利5枝</td>\n",
       "      <td>64</td>\n",
       "      <td>2.55</td>\n",
       "      <td>15291</td>\n",
       "      <td>上海</td>\n",
       "      <td>163.20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>536378</td>\n",
       "      <td>22386</td>\n",
       "      <td>2020-06-01 09:37:00</td>\n",
       "      <td>百合粉色10花苞</td>\n",
       "      <td>10</td>\n",
       "      <td>1.95</td>\n",
       "      <td>14688</td>\n",
       "      <td>北京</td>\n",
       "      <td>19.50</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>536378</td>\n",
       "      <td>85099C</td>\n",
       "      <td>2020-06-01 09:37:00</td>\n",
       "      <td>橙黄香槟色康乃馨</td>\n",
       "      <td>10</td>\n",
       "      <td>1.95</td>\n",
       "      <td>14688</td>\n",
       "      <td>北京</td>\n",
       "      <td>19.50</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14564</th>\n",
       "      <td>545190</td>\n",
       "      <td>22937</td>\n",
       "      <td>2020-08-29 15:32:00</td>\n",
       "      <td>产品说明掩码</td>\n",
       "      <td>6</td>\n",
       "      <td>18.00</td>\n",
       "      <td>15656</td>\n",
       "      <td>苏州</td>\n",
       "      <td>108.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14565</th>\n",
       "      <td>545190</td>\n",
       "      <td>22722</td>\n",
       "      <td>2020-08-29 15:32:00</td>\n",
       "      <td>产品说明掩码</td>\n",
       "      <td>4</td>\n",
       "      <td>39.50</td>\n",
       "      <td>15656</td>\n",
       "      <td>苏州</td>\n",
       "      <td>158.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14566</th>\n",
       "      <td>545190</td>\n",
       "      <td>22457</td>\n",
       "      <td>2020-08-29 15:32:00</td>\n",
       "      <td>产品说明掩码</td>\n",
       "      <td>60</td>\n",
       "      <td>3.00</td>\n",
       "      <td>15656</td>\n",
       "      <td>苏州</td>\n",
       "      <td>180.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14567</th>\n",
       "      <td>545190</td>\n",
       "      <td>22464</td>\n",
       "      <td>2020-08-29 15:32:00</td>\n",
       "      <td>产品说明掩码</td>\n",
       "      <td>12</td>\n",
       "      <td>25.00</td>\n",
       "      <td>15656</td>\n",
       "      <td>苏州</td>\n",
       "      <td>300.00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14568</th>\n",
       "      <td>545190</td>\n",
       "      <td>22423</td>\n",
       "      <td>2020-08-29 15:32:00</td>\n",
       "      <td>产品说明掩码</td>\n",
       "      <td>1</td>\n",
       "      <td>12.75</td>\n",
       "      <td>15656</td>\n",
       "      <td>苏州</td>\n",
       "      <td>12.75</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>14569 rows × 9 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "          订单号     产品码                消费日期           产品说明  数量     单价    用户码  \\\n",
       "0      536374   21258 2020-06-01 09:09:00        五彩玫瑰五支装  32  10.95  15100   \n",
       "1      536376   22114 2020-06-01 09:32:00       茉莉花白色25枝  48   3.45  15291   \n",
       "2      536376   21733 2020-06-01 09:32:00  教师节向日葵3枝尤加利5枝  64   2.55  15291   \n",
       "3      536378   22386 2020-06-01 09:37:00       百合粉色10花苞  10   1.95  14688   \n",
       "4      536378  85099C 2020-06-01 09:37:00       橙黄香槟色康乃馨  10   1.95  14688   \n",
       "...       ...     ...                 ...            ...  ..    ...    ...   \n",
       "14564  545190   22937 2020-08-29 15:32:00         产品说明掩码   6  18.00  15656   \n",
       "14565  545190   22722 2020-08-29 15:32:00         产品说明掩码   4  39.50  15656   \n",
       "14566  545190   22457 2020-08-29 15:32:00         产品说明掩码  60   3.00  15656   \n",
       "14567  545190   22464 2020-08-29 15:32:00         产品说明掩码  12  25.00  15656   \n",
       "14568  545190   22423 2020-08-29 15:32:00         产品说明掩码   1  12.75  15656   \n",
       "\n",
       "       城市      总价  \n",
       "0      北京  350.40  \n",
       "1      上海  165.60  \n",
       "2      上海  163.20  \n",
       "3      北京   19.50  \n",
       "4      北京   19.50  \n",
       "...    ..     ...  \n",
       "14564  苏州  108.00  \n",
       "14565  苏州  158.00  \n",
       "14566  苏州  180.00  \n",
       "14567  苏州  300.00  \n",
       "14568  苏州   12.75  \n",
       "\n",
       "[14569 rows x 9 columns]"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_sales_3m = df_sales[(df_sales.消费日期 > '2020-06-01') & (df_sales.消费日期 <= '2020-08-30')] # 构建仅含头三个月数据的数据集\n",
    "df_sales_3m.reset_index(drop=True) # 重置索引"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>用户码</th>\n",
       "      <th>消费日期</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>14684</td>\n",
       "      <td>2020-06-12 12:44:00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>14688</td>\n",
       "      <td>2020-08-23 11:33:00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>14692</td>\n",
       "      <td>2020-08-14 13:15:00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>14696</td>\n",
       "      <td>2020-07-19 12:09:00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>14701</td>\n",
       "      <td>2020-08-16 11:40:00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>365</th>\n",
       "      <td>16011</td>\n",
       "      <td>2020-08-23 15:59:00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>366</th>\n",
       "      <td>16013</td>\n",
       "      <td>2020-08-12 11:31:00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>367</th>\n",
       "      <td>16014</td>\n",
       "      <td>2020-08-22 17:42:00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>368</th>\n",
       "      <td>16016</td>\n",
       "      <td>2020-06-08 14:10:00</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>369</th>\n",
       "      <td>16019</td>\n",
       "      <td>2020-08-17 10:04:00</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>370 rows × 2 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "       用户码                消费日期\n",
       "0    14684 2020-06-12 12:44:00\n",
       "1    14688 2020-08-23 11:33:00\n",
       "2    14692 2020-08-14 13:15:00\n",
       "3    14696 2020-07-19 12:09:00\n",
       "4    14701 2020-08-16 11:40:00\n",
       "..     ...                 ...\n",
       "365  16011 2020-08-23 15:59:00\n",
       "366  16013 2020-08-12 11:31:00\n",
       "367  16014 2020-08-22 17:42:00\n",
       "368  16016 2020-06-08 14:10:00\n",
       "369  16019 2020-08-17 10:04:00\n",
       "\n",
       "[370 rows x 2 columns]"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_user = pd.DataFrame(df_sales['用户码'].unique()) # 生成以用户码为主键的结构\n",
    "df_user.columns = ['用户码'] # 设定字段名\n",
    "df_user.head() # 显示头几行数据\n",
    "df_R_value = df_sales_3m.groupby('用户码').消费日期.max().reset_index() # 找到每个用户的最近消费日期，构建df_R_value对象\n",
    "df_R_value.columns = ['用户码', '最近购买日期'] # 设定字段名\n",
    "df_R_value['R值'] = (df_R_value['最近购买日期'].max() - df_R_value['最近购买日期']).dt.days # 计算最新日期于上次消费日期的天数\n",
    "df_user = pd.merge(df_user, df_R_values[['用户码', 'R值']], on='用户码') # 把上次消费距最新日期的天数(R值)合并至df_user结构\n",
    "\n",
    "df_F_value = df_sales_3m.groupby('用户码').消费日期.count().reset_index() # 计算每个用户消费次数，构建df_F_value对象"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
